package com.test.suanfa;

import java.util.HashSet;
import java.util.Set;

/**
 * 找出abcabcbb最长公共序列
 * 使用方式：滑动窗口
 */
public class 最长公共序列 {

    public static void main(String[] args) {
        String str = "abcabcbb";
        fn2(str.toCharArray());
    }

    public static void fn2(char[] arr) {
        int l = 0, r = 0, max = 0;
        Set<Character> map = new HashSet<>();
        while (r < arr.length) {
            if (map.contains(arr[r])){
                map.remove(arr[r]);
                l++;
            }else{
                map.add(arr[r]); // 这里能这么写主要是因为r的初始值是0
                r++;
                int len = r - l; // 上面右移以后r为1
                max = Math.max(len,max); // 计算最大长度
            }
        }
        System.out.println(max);
    }

    public static void fn1(char[] arr) {
        int l = 0, r = 0, max = 0;
        Set<Character> map = new HashSet<>();
        while (r < arr.length) {
            if (map.contains(arr[r])) {
                map.remove(arr[l]);
                l++;
            } else {
                map.add(arr[r]);
                r++;
                int tmp = r - l;
                max = Math.max(tmp, max);
            }
        }
        System.out.println(max);
    }
}
